package com.example.admin.repository.impl;

import com.example.admin.repository.BaseRepository;
import jakarta.persistence.EntityManager;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;


public abstract class BaseRepositoryImpl<T, ID> extends SimpleJpaRepository<T, ID> implements BaseRepository<T, ID> {

    private final EntityManager entityManager;

    public BaseRepositoryImpl(JpaEntityInformation<T, ID> entityInformation, EntityManager entityManager) {
        super(entityInformation, entityManager);
        this.entityManager = entityManager;
    }

//    @Override
//    public List<T> getArrayList(
//            Specification<T> specification,
//            Pageable pageable,
//            String group,
//            List<String> having,
//            String whereRaw) {
//
//        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
//        CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(getDomainClass());
//        Root<T> root = criteriaQuery.from(getDomainClass());
//
//        criteriaQuery.select(root);
//
//        if (specification != null) {
//            Predicate predicate = specification.toPredicate(root, criteriaQuery, criteriaBuilder);
//            criteriaQuery.where(predicate);
//        }
//
//        if (group != null && !group.isEmpty()) {
//            criteriaQuery.groupBy(root.get(group));
//        }
//
//        if (having != null && !having.isEmpty()) {
//            // Implement 'having' clause if necessary
//        }
//
//        if (whereRaw != null && !whereRaw.isEmpty()) {
//            // Implement 'whereRaw' clause if necessary
//        }
//
//        var query = entityManager.createQuery(criteriaQuery);
//        query.setFirstResult((int) pageable.getOffset());
//        query.setMaxResults(pageable.getPageSize());
//
//        return query.getResultList();
//    }
}
